package com.zjh.core.base.basemapper;

import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.List;
import java.util.Map;


/**
 * @author lk
 * @Description: mapper基类
 * @date 2016/3/02 18:55
 */
public interface BaseMapper<T, ID extends Serializable> {

    /**
     * 插入对象
     *
     * @param t
     * @return
     */
    int insert(T t);

    /**
     * 批量插入对象
     *
     * @param t
     * @return
     */
    int insertBatch(List<T> t);


    /**
     * 批量删除
     *
     * @param ids
     * @return
     */
    int deleteBatchById(List<ID> ids);


    /**
     * deleteById 根据id删除
     *
     * @param id
     * @return
     */
    int deleteById(@Param("id") ID id);


    /**
     * 根据id删除
     *
     * @param id
     * @return int 返回影响的行数
     */
    int deleteById(@Param("id") String id);


    /**
     * 更新对象
     *
     * @param t
     * @return int 返回影响的行数
     */
    int update(T t);


    /**
     * 根据参数查询对象
     *
     * @param parameter
     * @return T 返回查询的对象
     */
    T find(Map<String, Object> parameter);


    /**
     * 根据id查询对象
     *
     * @param id
     * @return T 返回查询的对象
     */
    T findById(@Param("id") ID id);


    /**
     * 根据id查询对象
     *
     * @param id
     * @return T 返回查询的对象
     */
    T findById(@Param("id") String id);


    /**
     * 根据名称查询
     *
     * @param name
     * @return T 返回查询的对象
     */
    T findByName(@Param("name") String name);


    /**
     * 根据参数查询全部对象
     *
     * @param parameter
     * @return List<T> 返回查询的对象集合
     */
    List<T> queryListAll(Map<String, Object> parameter);


    /**
     * 根据分页参数查询对象
     *
     * @param parameter
     * @return List<T> 返回查询的对象集合
     */
    List<T> queryListByPage(Map<String, Object> parameter);

    /**
     * 前端根据分页参数查询对象
     *
     * @param parameter
     * @return List<T> 返回查询的对象集合
     */
    List<T> frontQueryListByPage(Map<String, Object> parameter);
    
    /**
     * 根据参数查询对象总条数
     *
     * @param parameter
     * @return
     */
    int count(Map<String, Object> parameter);

}
